//
//  HMHomeTableViewCell.swift
//  HMWeiBo
//
//  Created by Apple on 16/8/1.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit
import SnapKit

class HMHomeTableViewCell: UITableViewCell {

    // 这个是 全局约束
    var constrait: Constraint?
    
//    var homeModel: HMStatusModel?
    var cellViewModel: HMHomeCellViewModel?
        {
    // 当 cellViewModel 有值的时候,我们再给 原创View的属性赋值
        // didSet
        didSet{
        
            // 把数据传递给原创View
            orginalView.orginalViewModel = cellViewModel
            // 
            footerView.footerViewModel = cellViewModel
            
            retweetView.retweetViewModel = cellViewModel
            
            // 赋值的时候,我们 给 全局的约束 卸载掉
            constrait?.uninstall()
            
            // 原来的cell 会记录这个约束 footerView.top.equalTo(orginalView.snp_bottom)~~~~~~~
            // 创建一个  footerView.top.equalTo(retweetView.snp_bottom).
            
            // 转发微博思路的第二步:
            // 我们通过 判断 有没有转发微博数据来判断原创微博和转发微博
            if cellViewModel?.statusModel?.retweeted_status == nil {
                
                // 原创微博
                retweetView.hidden = true
                
                //转发微博思路的第三步:  更新底部视图的约束
                // 原创微博 存在一个问题: 转发微博的高度还在
                // 我们应该让转发微博的高度,不在 自动计算行高之内
                // 我们可以让 底部功能视图的顶部 和 原创微博的 底部对齐
                
                /*
                    snp_updateConstraints 的原理
                    1. 当 视图 找不到 约束的时候, 我们会在这个视图里给他添加一个约束
                    2. 当 视图 找到 这个约束的时候,我们会 更新 这个约束
                */
                
                
                
//                
                footerView.snp_updateConstraints(closure: { (make) -> Void in
                    
                    // 记录这个约束,用于下次重用的时候,卸载
                  self.constrait =
                    make.top.equalTo(orginalView.snp_bottom).constraint
                })
                
                /*
                    如何才是同一个约束:
                    item 和 attribute
                    toItem 和 attribute
                */
                
                let constait = NSLayoutConstraint(item: footerView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: orginalView, attribute: .Bottom, multiplier: 1.0, constant: 0)
                
                
            } else  {
                
                // 转发微博
                retweetView.hidden = false
                
                
//                // 转发微博的约束也需要更新一下
                footerView.snp_updateConstraints(closure: { (make) -> Void in
                  self.constrait =
                    make.top.equalTo(retweetView.snp_bottom).constraint
                })
                
                //let constait = NSLayoutConstraint(item: footerView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: retweetView, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0)
            }
        }
        
    }
    
   override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    // 添加子控件,设置约束
    private func setupUI(){
        
        // 
        contentView.addSubview(orginalView)
        contentView.addSubview(footerView)
        contentView.addSubview(retweetView)
    
        
        
        // 原创微博约束 -- 为了测试,添加满
        orginalView.snp_makeConstraints { (make) -> Void in
            make.left.equalTo(contentView.snp_left)
            make.top.equalTo(contentView.snp_top)
            make.right.equalTo(contentView.snp_right)
//            make.bottom.equalTo(contentView.snp_bottom)
        }
        
        retweetView.snp_makeConstraints { (make) -> Void in
            make.left.equalTo(contentView.snp_left)
            make.top.equalTo(orginalView.snp_bottom)
            make.right.equalTo(contentView.snp_right)
        }
        
        footerView.snp_makeConstraints { (make) -> Void in
            
            // 第一次 我们用 全局来记录一下 footerView 的 top,的约束
           self.constrait = make.top.equalTo(retweetView.snp_bottom).constraint
            
            make.left.equalTo(contentView.snp_left)
            make.right.equalTo(contentView.snp_right)
            make.height.equalTo(44)
            
            
            
        }
        
        // 设置自动计算行高的第二步: 
        // 设置一下Cell的ContentView
        // 自动计算行高: 就是Cell的 ContentView 根据约束来计算
        // 当讲完配图的时候,我们把这些约束去掉,就知道不设置ContentView约束的后果了
        contentView.snp_makeConstraints { (make) -> Void in
            make.left.equalTo(self.snp_left)
            make.top.equalTo(self.snp_top)
            make.right.equalTo(self.snp_right)
            // 注意: 自动计算行高的时候,要告诉 contentView的底部到哪个控件
            make.bottom.equalTo(footerView.snp_bottom)
        }
        
    }
    
    
    //MARK:-- 懒加载
    private lazy var orginalView: HMOrginalView = HMOrginalView()
    
    private lazy var retweetView: HMRetweetView = HMRetweetView()
    
    private lazy var footerView: HMFooterView = HMFooterView()

}
